/**
 *	Scotiabank Simuladores Script
 *	@author Gary Rios
 */
 
window.global = {currency: "S/. "};

// jQuery serialize object plugin
(function($) {
$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
}})(jQuery);

// placeholder
(function() {
	if(!!("placeholder" in document.createElement("input"))) return;	
	$("input[placeholder], textarea[placeholder]").each(function() {
		var val = $(this).attr("placeholder");
		if ( this.value == "" ) {
			this.value = val;
		}
		$(this).focus(function() {
			if ( this.value == val ) {
				this.value = "";
			}
		}).blur(function() {
			if ( $.trim(this.value) == "" ) {
				this.value = val;
			}
		})
	});
	// Clear default placeholder values on form submit
	$('form').submit(function() {
		$(this).find("input[placeholder], textarea[placeholder]").each(function() {
			if (this.value == $(this).attr("placeholder")) {
				this.value = "";
			}
		});
	});
})();

/*
 * Translated default messages for the jQuery validation plugin.
 * Locale: ES (Spanish; Español)
 */
(function ($) {
	$.extend($.validator.messages, {
		required: "Este campo es obligatorio.",
		remote: "Por favor, rellena este campo.",
		email: "Por favor, escribe una dirección de correo válida",
		url: "Por favor, escribe una URL válida.",
		date: "Por favor, escribe una fecha válida.",
		dateISO: "Por favor, escribe una fecha (ISO) válida.",
		number: "Por favor, escribe un número válido.",
		digits: "Por favor, escribe sólo dígitos.",
		creditcard: "Por favor, escribe un número de tarjeta válido.",
		equalTo: "Por favor, escribe el mismo valor de nuevo.",
		accept: "Por favor, escribe un valor con una extensión aceptada.",
		maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."),
		minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."),
		rangelength: $.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."),
		range: $.validator.format("Por favor, escribe una cantidad entre {0} y {1}."),
		max: $.validator.format("Por favor, escribe una cantidad menor o igual a {0}."),
		min: $.validator.format("Por favor, escribe una cantidad mayor o igual a {0}.")
	});
}(jQuery));

// script
(function() {
	
// vars
var $main = $("#main"),
	$steps = $("ul.steps").children().not(":first-child"),
	$slides = $("img.slide.step"),
	$panes = $main.find("div.pane"),
	$form = $main.find("form").filter("[data-type]"),
	$buttons = $main.find("input").filter(":button"),
	data = {};
/**
 *	Formats a numeric figure
 *	@param {Number} value The numeric figure
 *	@return {String} The formatted figure
 */
function formatFigure(value) {
	if(typeof value === "number") value = value.toFixed(2);
	return (value + "").replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
	return (b.charAt(0) > 0 && !(c || ".").lastIndexOf(".") ? b.replace(/(\d)(?=(\d{3})+$)/g, "$1,") : b) + c;
  });
}

function replaceCommas($obj) {
	$obj.each(function() {
		$(this).val($(this).val().replace(/,/g, ""));
	});
}

function addCommas($obj) {
	$obj.each(function() {
		$(this).val(formatFigure($(this).val()));
	});
}

// fade
$("img").css("visibility", "hidden").imagesLoaded({
	progress: function(isBroken, $images, $proper, $broken) {
		var $this = $(this).css("visibility", "");
		if($.support.opacity) $this.css("opacity", 0).animate({"opacity": 1}, function() { $this.css({"opacity": ""}); if(!$this.attr("style")) $this.removeAttr("style"); });
	}
});

// top menu
$("#main > li").on({
	mouseenter: function() {
		 $(this).find(".dropdown2").stop().hide().slideDown();
	},
	mouseleave: function() {
		 $(this).children("div.dropdown2").stop().attr("style", "");
	}
});

// dropdown simuladores
$("ul.icons > li").on({
	mouseenter: function() {	
		$(this).children("div.dropdown-sim").stop().hide().slideDown();
	},
	mouseleave: function() {
		$(this).children("div.dropdown-sim").stop().attr("style", "");
	}
});

// slideshow
$("ul.slidetabs").tabs("img.slide", {
	effect:"fade",
	fadeOutSpeed:1000,
	fadeInSpeed:1000,
	rotate:true
}).slideshow({autoplay:true, interval:5000, clickable:false});

// tooltips
$("span.info").tooltip({effect: "slide"});

// overlay
$("a[rel]").overlay({top: "center", oneInstance: false, mask: {color: "#666666"}});
$("#lbox_contact").overlay({top: "center", oneInstance: false, mask: {color: "#666666"}});

$("form[data-type]").on("submit", function() {
var $inputs = $(this).find(":input").not(":button");
	replaceCommas($inputs.filter("[range]"));
});

// validate
$form.validate({onfocusout: false, onkeyup: false});
$form.find(":input").filter("[range]").on("focusout", function() {
	replaceCommas($(this));
	addCommas($(this));
});


// datos correo
$("#lbox_contact").find("form").on("submit", function(e) {
	e.preventDefault();
	$(this).replaceWith('<h4>Scotiabank hace tu vida más simple</h4>' +
	'<div class="ajax">' +
	'<p>En breve nos pondremos en contacto para brindarte el mejor servicio.</p>' +
	'<p>Puede ver nuestra gama de <a href="simuladores.html">productos</a> y ' +
	'también puede <a href="personas-libre.html">volver a hacer la simulación</a></p>' +
	'</div>');
});

// init
$.getJSON("data/data.json", function(d) { data = d; });
$panes.eq(0).show();
$slides.eq(0).show();

// events listeners
// buttons
$buttons.on("click", function() {
	var isPrev = $(this).hasClass("prev"),
		$target = isPrev ? $(this).parents("div.pane").prev() : $(this).parents("div.pane").next(),
		index = $target.index("div.pane"),
		$inputs = $(this).closest("div.pane").find(":input").not(":button"),
		$numbers = $inputs.filter("[range]");
	
	replaceCommas($numbers);
	
	if(!isPrev && !$inputs.valid()) {
		addCommas($numbers);
		return;
	}
	
	addCommas($numbers);
	
	$panes.hide().filter($target).show();
	if($.support.opacity) $slides.stop(true).fadeOut().eq(index).stop(true).fadeIn();
	else $slides.hide().eq(index).show();
	$steps.removeClass("current").eq(index).addClass("current");
	if($(this).hasClass("enter")) {
		$("a.btn_contact").show();
		$("ul.results").show();
		$("p.notice").show();
	}
});



// moneda del prestamo
$("select").filter("[name=curAmount]").on("change", function() {
	var val = $(this).val(),
		cur = val === "ns" ? "S/. " : "US$ ",
		$amount = $("input").filter("[name=amount]");
	if(val === "ns") $amount.rules("add", {range: [0, 1375000]});
	else $amount.rules("add", {range: [0, 500000]});
	window.global.currency = cur;
});
// cuota cero
$main.find("input").filter("[name=zero]").on("change", function() {
	var value = $(this).val() === "true" ? true : false,
		$select = $main.find("select").filter("[name=zeroMonth]").prop("disabled", !value);
	$select.rules("add", {required: value});
});
// boton simular
$("input.enter").on("click", function() {
	var $numbers = $form.find(":input").filter("[range]"),
		$var = $main.find("ul.results").find("var"),
		type = $form.data("type"),
		input = {},
		output = {},
		cur = $("select").filter("[name=curAmount]").val() === "ns" ? "S/. " : "US$ ";
	
	replaceCommas($numbers);
	input = $form.serializeObject();	
	output = window.sim[type](input, data[type]);
	$var.eq(0).text(cur + formatFigure(input.amount));
	$var.eq(1).text(cur + formatFigure(output.totalFee));
	$var.eq(2).text(output.tea + " %");
	$var.eq(3).text(output.tea + " %");
	$var.eq(4).text(input.months + " meses");
	addCommas($numbers);
});

})();